package com.fmm.medium;

import java.util.Arrays;

public class MaxNumber {

    /**
     * 给定一组非负整数，重新排列它们的顺序使之组成一个最大的整数。
     * @param nums 数组
     * @return 重新排列之后的最大数字
     */
    public static String largestNumber(int[] nums) {
        // int 数组转换成 long，因为在比较的时候，长度可能超过int的最长长度
        Long[] numbers = new Long[nums.length];
        for (int i = 0; i < nums.length; i++) {
            numbers[i] = Long.valueOf(nums[i]);
        }
        Arrays.sort(numbers, (x, y) -> {
            // 获取 x 数字的位数
            int xc = String.valueOf(x).length();
            // 获取 y 数字的位数
            int yc = String.valueOf(y).length();
            // 从大到小排序
            if ((y * (long) Math.pow(10, xc) + x) - (x * (long) Math.pow(10, yc) + y) > 0 ) {
                return 1;
            } else {
                return -1;
            }
        });
        // 如果第一个是 0，后面肯定都是 0，直接返回结果
        if (numbers[0] == 0) {
            return "0";
        }
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < numbers.length; i++) {
            sb.append(numbers[i]);
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        int[] nums = {1,2,3,4,5,6,7,8,9,0};
        System.out.println(largestNumber(nums));
    }
}
